#include "threadPool.hpp"
#include "Task.hpp"
#include <ctime>
#include <cstdlib>
#include <iostream>
#include <unistd.h>

int main()
{
    srand((unsigned long)time(nullptr) ^ getpid());
    // ThreadPool<Task> *tp = new ThreadPool<Task>();
    // tp->run(); // 下面是单例模式

    ThreadPool<Task>::getThreadPool()->run();
    // while(true) // 主线程向线程池push任务->现在没有，暂时写个joins接口
    // {}
    // tp->joins();
    
    while(true)
    {
        //生产的过程，制作任务的时候，要花时间
        int x = rand() % 100 + 1;
        usleep(7721);
        int y = rand() % 30 + 1;
        Task t(x, y, [](int x, int y)->int{return x + y;});

        // std::cout << "制作任务完成: " << x << " + " << y << " = ?" << std::endl;
        logMessage(DEBUG, "制作任务完成: %d + %d = ?", x, y);

        // 推送任务到线程池中
        // tp->pushTask(t); // 下面是单例模式

        ThreadPool<Task>::getThreadPool()->pushTask(t);
        sleep(1);
    }

    return 0;
}
















// #include "threadPool.hpp"
// #include "Task.hpp"
// #include <ctime>
// #include <cstdlib>
// #include <iostream>
// #include <unistd.h>

// // void *run(void *args)
// // {
// //     while(true)
// //     {
// //         ThreadPool<Task>::getThreadPool();
// //     }
// // }

// int main()
// {
//     // logMessage(NORMAL, "%s %d %c %f \n", "这是一条日志信息", 1234, 'c', 3.14);

//     srand((unsigned long)time(nullptr) ^ getpid());
//     // ThreadPool<Task> *tp = new ThreadPool<Task>();
//     // ThreadPool<Task> *tp = ThreadPool<Task>::getThreadPool();
//     // 那么，如果单例本身也在被多线程申请使用呢？？
//     ThreadPool<Task>::getThreadPool()->run();
//     //thread1,2,3,4

    // while(true)
    // {
    //     //生产的过程，制作任务的时候，要花时间
    //     int x = rand()%100 + 1;
    //     usleep(7721);
    //     int y = rand()%30 + 1;
    //     Task t(x, y, [](int x, int y)->int{return x + y;});

    //     // std::cout << "制作任务完成: " << x << "+" << y << "=?" << std::endl;
    //     logMessage(DEBUG, "制作任务完成: %d+%d=?", x, y);
    //     logMessage(DEBUG, "制作任务完成: %d+%d=?", x, y);
    //     logMessage(DEBUG, "制作任务完成: %d+%d=?", x, y);
    //     logMessage(DEBUG, "制作任务完成: %d+%d=?", x, y);

    //     // 推送任务到线程池中
    //     ThreadPool<Task>::getThreadPool()->pushTask(t);

    //     sleep(1);
    // }
//     return 0;
// }